Результаты поиска
- Бесконечный редирект (цикл): Если
reg.playportal.gamesили основной доменpromo-ltd.ruнаправлены на этот же PHP-скрипт, возникает петля. Пользователь заходит, скрипт делает редирект, браузер снова попадает на скрипт — и так по кругу сотни раз в секунду для каждого клиента. - Скликивание и боты: Использование wildcard-доменов (
*.) привлекает огромное количество ботов, сканирующих интернет. Каждый запрос бота заставляет IIS отдавать заголовки ответа. Если ботов тысячи, «копеечный» трафик заголовков складывается в гигабайты. - HTTP-флуд (DDoS): Злоумышленники могут использовать ваш wildcard как «отражатель». Они генерируют запросы на несуществующие поддомены (например,
random123.playportal.games), а ваш сервер вынужден отвечать каждому.
Откройте логи IIS (обычно в
C:\inetpub\logs\LogFiles). Посмотрите на колонку sc-bytes (отправленные байты) и sc-status. Если вы видите тысячи запросов с кодом 302 от одного и того же IP или на один и тот же адрес — это оно.- Проверьте, не редиректит ли скрипт на самого себя.
- Добавьте в начало PHP условие, чтобы не редиректить, если
SERVER_NAMEуже является целевым доменом.
<?php
$host = $_SERVER['SERVER_NAME'];
// 1. Обработка playportal.games
if (str_ends_with($host, 'playportal.games')) {
// ПРОВЕРКА: Если мы уже на целевом поддомене "reg.", ничего не делаем
if ($host !== 'reg.playportal.games') {
$subdomain = stristr($host, '.', true);
header('Location: http://playportal.games' . $subdomain . '#fourth');
exit; // Обязательно выходим, чтобы не грузить HTML ниже
}
}
// 2. Обработка promo-ltd.ru
elseif (str_ends_with($host, 'promo-ltd.ru')) {
// ПРОВЕРКА: Если мы уже на основном домене, не редиректим
if ($host !== 'promo-ltd.ru') {
$subdomain = stristr($host, '.', true);
header('Location: http://promo-ltd.ru' . $subdomain . '#connect');
exit;
}
}
// Дальше идет ваш обычный HTML-код заглушки
?>
exit;послеheader('Location: ...'): Это критическая ошибка во многих скриптах. БезexitPHP продолжит выполнять скрипт и отправит весь ваш HTML-код вместе с заголовком редиректа. Браузер его не покажет, но трафик будет расходоваться впустую.- Проверка
if ($host !== '...'): Мы добавили исключение. Теперь, если пользователь уже перешел наreg.playportal.games, скрипт увидит, что цель достигнута, и не будет отправлять его по кругу. str_ends_with: Я заменилsubstrна более современную функцию (доступна в PHP 8+), она нагляднее. Если у вас старая версия PHP, оставьте ваш вариант сsubstr, но обязательно добавьте проверку на исключение иexit.
- Исчезнут петли: Один запрос — один ответ. Трафик упадет в десятки раз.
- Экономия на теле ответа: Благодаря
exit, сервер перестанет отдавать «невидимый» HTML-текст при каждом редиректе.
str_ends_with или нужно оставить substr).ClaudeBot, GPTBot, AhrefsBot и Facebook Crawler. Они заходят на несуществующие страницы старых форумов и сайтов (например, forum.murlyki.ru, unicar-r.mail.com), которых, как вы говорите, в IIS нет.- Wildcard-ловушка: У вас в IIS настроен прием любого поддомена (
*). Боты находят старые ссылки в интернете и ломятся по ним. Ваш IIS не выдает ошибку 404, а послушно передает запрос в PHP-скрипт заглушки. - Отсутствие редиректа для этих доменов: В вашем коде условия прописаны только для
playportal.gamesиpromo-ltd.ru. Когда бот заходит наforum.murlyki.ru, скрипт:- Пропускает все
ifиelseif. - Отдает боту полную HTML-страницу заглушки с кодом
200 OK.
- Пропускает все
- Бесконечные ссылки: Обратите внимание на URL в логе: там огромные хвосты параметров (
&gonews=lines&gonews=lines...). Боты воспринимают это как новые страницы и продолжают качать их бесконечно, генерируя гигабайты исходящего трафика.
<?php
$host = $_SERVER['SERVER_NAME'];
// 1. Обработка playportal.games
if (strpos($host, 'playportal.games') !== false) {
if ($host !== 'reg.playportal.games') {
$subdomain = stristr($host, '.', true);
header('Location: http://playportal.games' . $subdomain . '#fourth');
exit;
}
}
// 2. Обработка promo-ltd.ru
elseif (strpos($host, 'promo-ltd.ru') !== false) {
if ($host !== 'promo-ltd.ru') {
$subdomain = stristr($host, '.', true);
header('Location: http://promo-ltd.ru' . $subdomain . '#connect');
exit;
}
}
// 3. ВСЕ ОСТАЛЬНОЕ (боты, левые домены типа mail.com и т.д.)
else {
// Отдаем 404 ошибку и ПУСТУЮ страницу.
// Это мгновенно остановит ботов и сэкономит трафик.
header("HTTP/1.1 404 Not Found");
exit;
}
// Только если домен совпал и это не редирект, показываем HTML
?>
<!DOCTYPE html>
<html>
... ваш код заглушки ...
- Для
playportal.games: Будет работать редирект (быстро и дешево). - Для ботов с
murlyki.ruиmail.com: Сервер ответит коротким заголовком «404 Not Found» и не будет передавать HTML-код страницы. Исходящий трафик упадет почти до нуля.
- Если домен «наш» (
playportalилиpromo-ltd) — делаем редирект и прерываем выполнение (exit), чтобы не слать лишний HTML. - Если домен «левый» (как в логах:
murlyki.ru,mail.com) — отдаем 404 и прерываем выполнение. - Если домен совпадает с целью (например, человек уже перешел на
reg.playportal.games) — вот тогда и только тогда показываем HTML-заглушку.
<?php
$host = $_SERVER['SERVER_NAME'];
// --- БЛОК 1: Редиректы для поддоменов ---
// Для playportal.games
if (strpos($host, 'playportal.games') !== false) {
if ($host !== 'reg.playportal.games') {
$subdomain = stristr($host, '.', true);
header('Location: http://playportal.games' . $subdomain . '#fourth');
exit; // Выход! Не шлем HTML при редиректе
}
// Если мы УЖЕ на reg.playportal.games, скрипт пойдет дальше к HTML
}
// Для promo-ltd.ru
elseif (strpos($host, 'promo-ltd.ru') !== false) {
if ($host !== 'promo-ltd.ru') {
$subdomain = stristr($host, '.', true);
header('Location: http://promo-ltd.ru' . $subdomain . '#connect');
exit; // Выход!
}
// Если мы УЖЕ на promo-ltd.ru, скрипт пойдет дальше к HTML
}
// --- БЛОК 2: Отсекаем мусорных ботов (murlyki.ru, mail.com и прочие) ---
else {
// Если домен не входит в список разрешенных - отдаем 404 и НИЧЕГО не шлем
header("HTTP/1.1 404 Not Found");
exit;
}
// --- БЛОК 3: Сама заглушка (HTML) ---
// Сюда попадут ТОЛЬКО запросы на reg.playportal.games и promo-ltd.ru
?>
<!DOCTYPE html>
<html>
<head><title>Заглушка</title></head>
<body>
<h1>Добро пожаловать!</h1>
<!-- Ваш HTML код -->
</body>
</html>
- Уйдет лишний вес при редиректе: Раньше при редиректе сервер отправлял и заголовок
Location, и весь HTML ниже. Теперь благодаряexitотправляется только заголовок (несколько байт). - Боты-мусорщики перестанут качать HTML: В ваших логах
ClaudeBotиGPTBotзапрашивают сотни страниц наunicar-r.mail.com. Сейчас ваш сервер на каждый такой чих отдает полный HTML. С новым кодом он будет отдавать пустую 404 страницу. - Заглушка останется: Она будет видна только на тех доменах, которые вы явно разрешили в условиях.
*.playportal.games и *.promo-ltd.ru. Если там прописаны и другие домены (типа mail.com), их лучше оттуда удалить.<?php
$host = $_SERVER['SERVER_NAME'];
$server_ip = $_SERVER['SERVER_ADDR']; // Ваш IP адрес сервера
// 1. ПРОВЕРКА НА РЕДИРЕКТ (для поддоменов)
if (strpos($host, 'playportal.games') !== false && $host !== 'reg.playportal.games') {
$subdomain = stristr($host, '.', true);
header('Location: http://playportal.games' . $subdomain . '#fourth');
exit; // Важно! Не шлем HTML при редиректе
}
elseif (strpos($host, 'promo-ltd.ru') !== false && $host !== 'promo-ltd.ru') {
$subdomain = stristr($host, '.', true);
header('Location: http://promo-ltd.ru' . $subdomain . '#connect');
exit;
}
// 2. ФИЛЬТР МУСОРНОГО ТРАФИКА (Боты на левых доменах)
// Разрешаем: целевые домены, основной домен или прямой заход по IP
$allowed_hosts = ['reg.playportal.games', 'promo-ltd.ru', $server_ip, 'localhost'];
// Если зашли по чужому домену (mail.com, murlyki.ru и т.д.)
if (!in_array($host, $allowed_hosts) && !filter_var($host, FILTER_VALIDATE_IP)) {
header("HTTP/1.1 404 Not Found");
exit; // Боты получат 404 и 0 байт контента
}
// 3. САМА ЗАГЛУШКА (HTML)
// Сюда попадут только те, кто на нужных доменах или на IP
?>
<!DOCTYPE html>
<html>
<head><title>Сайт в разработке</title></head>
<body>
<h1>Заглушка работает</h1>
<!-- Ваш HTML код здесь -->
</body>
</html>
- Для ботов (ClaudeBot, GPTBot): Они заходят по домену
unicar-r.mail.com. Скрипт видит, что этого домена нет в спискеallowed_hosts, выдает 404 и не грузит HTML. Трафик экономится. - Для новых доменов по IP: Если домен делегирован на ваш IP, но в IIS не прописан —
SERVER_NAMEдля такого запроса обычно будет равен вашему IP. Условие в коде это пропустит, и человек увидит заглушку. - Для редиректов: Добавленный
exitпослеheaderгарантирует, что сервер не шлет лишние килобайты HTML-кода "вдогонку" к команде перенаправления.
$server_ip на реальный IP вашего сервера в коде или оставить проверку через filter_var, как в примере.ClaudeBot, GPTBot, AhrefsBot. Вы можете запретить им отдавать HTML-код вообще.$bots = ['ClaudeBot', 'GPTBot', 'AhrefsBot', 'facebookexternalhit', 'Googlebot', 'YandexBot'];
foreach ($bots as $bot) {
if (strpos($_SERVER['HTTP_USER_AGENT'], $bot) !== false) {
header("HTTP/1.1 404 Not Found");
exit;
}
}
$host = $_SERVER['SERVER_NAME'];
// Если это НЕ IP-адрес И в названии нет ваших ключевых слов
if (!filter_var($host, FILTER_VALIDATE_IP) &&
strpos($host, 'playportal') === false &&
strpos($host, 'promo-ltd') === false) {
// Значит это какой-то левый домен (типа murlyki.ru), даем 404
header("HTTP/1.1 404 Not Found");
exit;
}
&m=10&y=2026&gonews=lines&gonews=lines....Ваша заглушка — это простая страница, ей не нужны такие длинные запросы.
// Если в строке запроса больше 3-х параметров или она длиннее 100 символов
if (strlen($_SERVER['QUERY_STRING']) > 100) {
header("HTTP/1.1 404 Not Found");
exit;
}
exit (чтобы не слать HTML при перенаправлении) и проверку на ключевые слова (способ №2). Это позволит:- Показываться по IP (т.к. это не домен).
- Работать на всех ваших
*.playportal...и*.promo-ltd.... - Отсекать весь «левый» мусор вроде
mail.comбез ведения списков.
Import-Csv -Path "u_ex240522.log" -Delimiter " " -Header date,time,s_ip,cs_method,cs_uri_stem,cs_uri_query,s_port,cs_username,c_ip,cs_user_agent,cs_referer,sc_host,sc_status |
Select-Object sc_host -Unique | Sort-Object sc_host
sc_host на нужный номер.- Нажмите
Ctrl + H(Замена). - Режим поиска: Регулярное выражение.
- Найти:
^.*?\s(\S+)\s\d+$(это примерное выражение, оно зависит от порядка колонок. Для вашего лога лучше использовать поиск по пробелам). - Проще сделать так:
- Скопируйте весь текст в Excel.
- Используйте функцию «Данные» -> «Текст по столбцам» (разделитель — пробел).
- Оставьте только столбец с доменами.
- Нажмите «Удалить дубликаты».
awk (например, через Git Bash), это делается одной короткой командой:awk '{print $NF}' access.log | sort | uniq
$NF — это последняя колонка в строке. В вашем примере лога домен идет последним.Вы увидите список всех «левых» доменов (типа
murlyki.ru, unicar-r.mail.com и т.д.), которые сейчас «съедают» ваш трафик.- Зайдите в папку с логами.
- В адресной строке проводника (там, где написан путь к папке) сотрите всё, напишите
powershellи нажмите Enter. - В открывшееся синее окно вставьте код и нажмите Enter. Список доменов останется перед глазами.
Добавьте в самый конец скрипта
Read-Host, чтобы окно не закрывалось, пока вы не нажмете кнопку:Import-Csv -Path "u_ex240522.log" -Delimiter " " -Header date,time,s_ip,cs_method,cs_uri_stem,cs_uri_query,s_port,cs_username,c_ip,cs_user_agent,cs_referer,sc_host,sc_status |
Select-Object sc_host -Unique | Sort-Object sc_host | Out-Host
Read-Host "Нажмите Enter для выхода"
- Имя файла: Проверьте, что в коде написано именно
u_ex240522.log(как ваш реальный файл). Если файлов много, можно написать*.log. - Заголовки (Header): В вашем примере лога, который вы кидали выше, домен идет последним. В моем коде
sc_hostстоит в конце списка заголовков. Если список доменов будет пустым, значит, порядок колонок в вашем IIS отличается (например, включены не все поля).
200 и 302 — это коды ответов (sc-status), которые попали в колонку, где скрипт ожидал увидеть домен.Get-Content "u_ex*.log" | ForEach-Object {
if ($_ -notmatch "^#") {
$parts = $_.Split(" ")
$parts[-1] # Берем самый последний элемент строки
}
} | Select-Object -Unique | Sort-Object
Get-Content "u_ex*.log"— прочитает все файлы логов в папке.$_.Split(" ")— разрежет строку по пробелам.$parts[-1]— возьмет самое последнее слово в строке. В вашем логе, который вы присылали выше (... forum.murlyki.ru 200), последним идет статус, а предпоследним — домен.
$parts[-1] на $parts[-2].[-2]? Там должны быть forum.murlyki.ru, unicar-r.mail.com и остальные «виновники» трафика.Get-Content "u_ex*.log" | ForEach-Object {
if ($_ -notmatch "^#") {
$parts = $_.Trim().Split(" ")
if ($parts.Length -gt 2) { $parts[-2] }
}
} | Select-Object -Unique | Sort-Object
forum.murlyki.ruunicar-r.mail.comaxom.mail.combattle.mail.comhell.mail.com
playportal, promo-ltd) и прямой заход по IP, а всё остальное (весь этот mail.com и murlyki.ru) не жрало трафик, используйте в PHP черный список по ключевому слову:$host = $_SERVER['SERVER_NAME'];
// Если в домене есть "unifree" или "murlyki" — сразу отсекаем
if (preg_match('/(unifree|murlyki|battle|axom)/i', $host)) {
header("HTTP/1.1 404 Not Found");
exit;
}
// Дальше ваши обычные редиректы
if (strpos($host, 'playportal.games') !== false && $host !== 'reg.playportal.games') {
header('Location: http://playportal.games($host, '.', true).'#fourth');
exit;
}
// ... и так далее
- Вы не перечисляете сотни поддоменов. Одно слово
unifreeзаблокирует тысячи запросов типаhell.mail.com,battle.mail.comи т.д. - Трафик упадет мгновенно, так как сервер перестанет отдавать тяжелый HTML этим ботам.
200), используйте этот проверенный скрипт PowerShell.Get-Content "u_ex*.log" | ForEach-Object { if ($_ -notmatch "^#") { $_.Trim().Split(" ")[-2] } } | Where-Object { $_ -ne "-" } | Select-Object -Unique | Sort-Object
$result = [System.Collections.Generic.HashSet[string]]::new()
foreach ($line in [System.IO.File]::ReadLines("$pwd\u_ex240522.log")) {
if ($line -notmatch "^#") {
$parts = $line.Trim().Split(" ")
if ($parts.Length -gt 2) {
[void]$result.Add($parts[-2])
}
}
}
$result | Sort-Object
axom.mail.combattle.mail.comforum.murlyki.ruhell.mail.complayportal.gamesunicar-r.mail.com
mail.com и murlyki.ru.// Если в имени домена есть мусорные слова — обрываем соединение без отдачи HTML
if (preg_match('/(unifree|murlyki|battle|axom)/i', $_SERVER['SERVER_NAME'])) {
header("HTTP/1.1 410 Gone"); // Или 404
exit;
}
Mozilla/5.0...ClaudeBot/1.0...).# Скрипт выведет уникальные User-Agent, чтобы вы видели, кто именно «жрет» трафик
Get-Content "u_ex*.log" | ForEach-Object {
if ($_ -notmatch "^#") {
# В вашем логе User-Agent обычно идет после IP (поле 10-11)
$parts = $_.Split(" ")
if ($parts.Length -gt 10) { $parts[9] }
}
} | Select-Object -Unique | Sort-Object
[9] на [10].bots.php (или прямо в начале своего скрипта):<?php
// Список маркеров плохих ботов (наполняйте его по результатам анализа лога)
$bad_bots = [
'ClaudeBot',
'GPTBot',
'AhrefsBot',
'Amazonbot',
'facebookexternalhit',
'DotBot',
'PetalBot',
'Bytespider'
];
$user_agent = $_SERVER['HTTP_USER_AGENT'] ?? '';
// Универсальная проверка
foreach ($bad_bots as $bot_marker) {
if (stripos($user_agent, $bot_marker) !== false) {
// Если нашли бота — отдаем 404 и ПУСТОЙ ответ (0 байт контента)
header("HTTP/1.1 404 Not Found");
exit;
}
}
// Если бот не найден — выполняется ваш код с редиректами или HTML-заглушка
- Экономия трафика:
exitпосле заголовка 404 обрывает передачу данных. Бот получает только ~200 байт заголовков вместо сотен килобайт вашего HTML. - Гибкость: Вам достаточно добавить в массив
$bad_botsодно слово (например,MegaIndex), чтобы заблокировать все версии этого бота. - Автоматизация: Проанализировав лог раз в неделю, вы просто дописываете 1-2 новых слова в массив.
&m=07&unicar&y=2026...) — это типичная «ловушка для пауков» (crawler trap), которая заставляет ботов бесконечно качать одни и те же страницы, генерируя гигабайты трафика.Get-Content "u_ex*.log" | ForEach-Object {
if ($_ -match "compatible; (.*?);") {
$matches[1] # Вытащит "ClaudeBot/1.0", "GPTBot/1.3" и т.д.
}
elseif ($_ -match "meta-externalagent/.*?(\S+)") {
"FacebookCrawler"
}
} | Select-Object -Unique | Sort-Object
<?php
$host = $_SERVER['SERVER_NAME'];
$query = $_SERVER['QUERY_STRING'];
$ua = $_SERVER['HTTP_USER_AGENT'];
// ПРИЗНАК 1: Слишком длинный запрос (типично для ботов-мусорщиков из вашего списка)
// Если в адресе больше 100 символов или много повторов &unicar
if (strlen($query) > 150 || substr_count($query, 'unicar') > 1) {
header("HTTP/1.1 404 Not Found");
exit;
}
// ПРИЗНАК 2: Заход на "левые" домены (из вашего лога: unifree, murlyki, axom)
if (preg_match('/(unifree|murlyki|axom|battle|hell)/i', $host)) {
header("HTTP/1.1 410 Gone"); // 410 говорит боту: "Сайта тут больше нет, удали из индекса"
exit;
}
// ПРИЗНАК 3: Известные боты (маркеры из вашего анализа)
$bad_bots = ['ClaudeBot', 'GPTBot', 'AhrefsBot', 'facebookexternalhit', 'Amazonbot', 'DotBot'];
foreach ($bad_bots as $bot) {
if (stripos($ua, $bot) !== false) {
header("HTTP/1.1 404 Not Found");
exit;
}
}
// ЕСЛИ ПРОВЕРКИ ПРОЙДЕНЫ - ваш старый код с редиректами
if (strpos($host, 'playportal.games') !== false && $host !== 'reg.playportal.games') {
$sub = stristr($host, '.', true);
header("Location: http://playportal.games");
exit;
}
// И только в самом конце — HTML заглушка
?>
- Длинные URL: Ваши запросы
http://mail.com...будут отсекаться мгновенно (по длине и повторам). - Домены: Всё, что касается
unifreeиmurlyki, перестанет отдавать HTML. - Трафик: Исходящий поток упадет почти до нуля, так как сервер будет отвечать коротким заголовком (300 байт) вместо всей страницы.
All Unassigned (Все неназначенные) на порту 80 без указания конкретного домена, то ДА:- Любой запрос на любой домен, который направлен на ваш IP (через DNS), попадет в этот сайт.
- Все домены из ваших логов (
mail.com,murlyki.ruи т.д.) попадают в этот скрипт именно потому, что они «делегированы» на ваш сервер, а в IIS нет другого сайта, который бы их «перехватил» по конкретному имени. - Ваш сайт работает как «сачок», собирая весь мусорный трафик из интернета, который летит на ваш IP.
*.playportal.games и *.promo-ltd.ru:- Запросы на другие домены (типа
unicar-r.mail.com) не должны попадать в этот сайт. - НО, если у вас есть другой сайт (например, «Default Web Site»), который слушает всё остальное, то боты могут ломиться туда.
*) или привязка по IP-адресу. Боты находят старые записи в кэшах поисковиков, видят, что домен mail.com теперь ссылается на ваш IP, и приходят к вам.$_SERVER['SERVER_NAME'] этот «левый» домен и, так как он не подходит под ваши if/elseif, просто отдает им HTML-код заглушки.$host = $_SERVER['SERVER_NAME'];
// Если в домене НЕТ ваших брендов и это НЕ прямой заход по IP
if (strpos($host, 'playportal') === false &&
strpos($host, 'promo-ltd') === false &&
!filter_var($host, FILTER_VALIDATE_IP)) {
// Это чужой домен, пришедший "по ошибке". Отдаем 404 и закрываем соединение.
header("HTTP/1.1 404 Not Found");
exit;
}
*.mail.com, *.promo-ltd.ru и т.д.).*.mail.com. Боты находят в поиске миллионы старых ссылок на поддоменах (например, unicar-r.mail.com, axom.mail.com, battle.mail.com).- Бот запрашивает любую страницу на любом поддомене
*.mail.com. - IIS видит совпадение в биндингах и направляет запрос в ваш PHP-скрипт.
- Ваш текущий скрипт не имеет условий для домена
mail.com. - Скрипт просто «пролетает» мимо всех
if/elseifи отдает боту полную HTML-заглушку с кодом200 OK. - Бот видит
200 OK, считает страницу существующей и продолжает качать тысячи таких «страниц» по кругу.
mail.com) — отсекать без передачи данных.<?php
$host = $_SERVER['SERVER_NAME'];
// 1. ПРОВЕРКА НА БОТОВ (по User-Agent) - СРАЗУ ЭКОНОМИМ ТРАФИК
$bots = ['ClaudeBot', 'GPTBot', 'AhrefsBot', 'facebookexternalhit', 'Amazonbot'];
foreach ($bots as $bot) {
if (stripos($_SERVER['HTTP_USER_AGENT'], $bot) !== false) {
header("HTTP/1.1 404 Not Found");
exit;
}
}
// 2. РЕЖЕМ ЛИШНИЙ ТРАФИК ДЛЯ СТАРЫХ ДОМЕНОВ (unifree и прочие из биндингов)
// Если в домене есть "unifree", но это НЕ регистрация
if (strpos($host, 'mail.com') !== false && $host !== 'registration.mail.com') {
header("HTTP/1.1 410 Gone"); // Сообщаем ботам, что страниц тут больше нет
exit; // Важно: HTML код ниже НЕ будет отправлен
}
// 3. ВАШИ РЕДИРЕКТЫ
if (strpos($host, 'playportal.games') !== false && $host !== 'reg.playportal.games') {
$sub = stristr($host, '.', true);
header("Location: http://playportal.games");
exit;
}
elseif (strpos($host, 'promo-ltd.ru') !== false && $host !== 'promo-ltd.ru') {
$sub = stristr($host, '.', true);
header("Location: http://promo-ltd.ru");
exit;
}
// 4. ПОКАЗЫВАЕМ HTML ЗАГЛУШКУ
// Сюда попадут только: IP адрес, promo-ltd.ru, registration.mail.com и т.д.
?>
<!DOCTYPE html>
<html>
... ваш HTML ...
- Для
*.mail.com: Теперь вместо тяжелой HTML-страницы сервер будет отвечать коротким заголовком «410 Gone». Исходящий трафик для этих запросов уменьшится в сотни раз. - Для
playportalиpromo: Сохранится ваша логика редиректов. - По IP: Заглушка по-прежнему будет открываться (т.к. IP не содержит слово
unifree).
*.mail.com для чего-то полезного сейчас, или это полностью старый проект, который можно «закрыть» для всех?robots.txt — это первый барьер. Если бот (например, Google, Яндекс или GPTBot) увидит там запрет, он в идеале даже не будет запрашивать ваши тяжелые страницы, что сэкономит трафик еще до того, как сработает PHP-скрипт.*.), файл robots.txt должен быть доступен по адресу каждого поддомена (например, axom.mail.com/robots.txt). В IIS это работает автоматически, если файл лежит в корне сайта.robots.txt в корне сайта со следующим текстом:User-agent: *
Disallow: /
# Отдельно для наглых ботов, которые иногда игнорируют общие правила
User-agent: GPTBot
Disallow: /
User-agent: CCBot
Disallow: /
User-agent: ClaudeBot
Disallow: /
User-agent: AhrefsBot
Disallow: /
- Плохие боты его игнорируют: Сканеры уязвимостей и «серые» парсеры вообще не смотрят в
robots.txt. - Задержка: Боты не проверяют
robots.txtпри каждом клике. Они скачивают его раз в несколько часов/дней. Если они уже «зациклились» на ваших бесконечных ссылках, они могут продолжать качать их по старой памяти.
robots.txt с проверкой в PHP, которую мы обсуждали ранее.- PHP: Если в домене есть
unifreeилиmurlyki— отдаватьheader("HTTP/1.1 410 Gone")иexit;. Это заставит ботов выкинуть эти адреса из своей базы. - Robots.txt: Запретить всё для всех.
- IIS: Если какой-то поддомен вам точно больше никогда не понадобится, лучше вообще убрать
*.mail.comиз биндингов и прописать только конкретные нужные (например,registration.mail.com).
wp-content. Это значит, боты ищут у вас уязвимости WordPress. Проверка на длину URL (если QUERY_STRING > 100 символов — exit) отсечет 99% таких попыток взлома и сэкономит кучу исходящего трафика.exit; после редиректа в свой PHP-код? Это дает самый мгновенный результат.- Установка модуля (если нет):
- Зайдите в Server Manager -> Manage -> Add Roles and Features.
- Путь: Web Server (IIS) -> Web Server -> Security -> IP and Domain Restrictions. Установите его.
- Настройка динамических ограничений:
- Откройте IIS Manager.
- Выберите ваш сайт в дереве слева.
- В центральном окне дважды кликните по иконке IP Address and Domain Restrictions.
- В правой панели выберите Edit Dynamic Restriction Settings....
- Параметры защиты:
- Deny IP Address based on the number of concurrent requests: Поставьте галочку и введите, например,
10. Это ограничит количество одновременных соединений. - Deny IP Address based on the number of requests over a period of time: Поставьте галочку.
- Maximum number of requests: например,
20. - Time period (msec): например,
1000(1 секунда). - То есть: если кто-то просит больше 20 страниц в секунду — он летит в бан.
- Maximum number of requests: например,
- Deny IP Address based on the number of concurrent requests: Поставьте галочку и введите, например,
- Тип отказа (важно для трафика):
- Нажмите Edit Deny Action Type... в правой панели.
- Выберите Abort (Прервать).
- Результат: IIS просто «сбросит» соединение (TCP Reset), не отправляя боту вообще никаких данных (даже 404 страницы). Это самая жесткая и экономная мера для трафика.
ClaudeBot или GPTBot, которые вы видели в логах, запрашивают десятки страниц в секунду (те самые бесконечные ссылки с &y=2026). IIS увидит этот всплеск и просто перестанет отвечать этому IP на некоторое время.- Откройте Диспетчер серверов (Server Manager).
- Нажмите Управление (Manage) -> Добавить роли и компоненты.
- Идите до раздела: Роли сервера -> Веб-сервер (IIS) -> Веб-сервер -> Безопасность.
- Убедитесь, что стоит галочка на Ограничения IP-адресов и доменов (IP and Domain Restrictions). Если нет — установите.
- Откройте Диспетчер служб IIS (IIS Manager).
- В дереве слева выберите ваш Сайт (заглушку).
- В центральном окне найдите иконку Ограничения IP-адресов и доменов и откройте её двойным кликом.
- В правой колонке (Действия) нажмите Изменить параметры динамического ограничения... (Edit Dynamic Restriction Settings).
- Запретить IP-адрес на основе количества одновременных запросов: поставьте 5 или 10. (Это отсечет тех, кто открывает 100 соединений сразу).
- Запретить IP-адрес на основе количества запросов за период времени:
- Максимальное число запросов: 20.
- Период времени (мс): 1000 (это 1 секунда).
- Смысл: если бот просит больше 20 страниц в секунду — он блокируется.
- Выберите вариант Прервать (Abort).
- Почему это важно: Вместо того чтобы слать боту страницу с ошибкой (которая тоже весит байты), IIS просто «сбросит» соединение (TCP Reset). Бот не получит вообще ничего, и ваш исходящий трафик для него станет 0 байт.
- Когда запрос приходит на сервер, IIS видит IP-адрес клиента (например,
89.179.x.x). - Чтобы понять, какой это домен, IIS делает обратный запрос DNS (Reverse DNS).
- Если DNS отвечает, что этот IP принадлежит, например,
googlebot.com, IIS сравнивает его с вашим списком и разрешает или запрещает вход.
- DNS-запросы на каждый чих: На каждый запрос каждого бота ваш сервер будет сам лезть в интернет, чтобы узнать имя этого бота. Если ботов тысячи, ваш сервер «захлебнется» в ожидании ответов от DNS.
- Исходящий трафик возрастет: Теперь к трафику ответов добавятся тысячи мелких DNS-запросов от самого сервера.
- Это легко подделать: Многие плохие боты не имеют корректных обратных DNS-записей, и IIS просто не сможет определить их домен.
- В IIS Manager выберите сайт и откройте Перезапись URL-адресов (URL Rewrite).
- Нажмите Добавить правило... -> Пустое правило.
- В блоке Условия (Conditions) нажмите Добавить:
- Условие:
{HTTP_HOST}. - Шаблон:
.*unifree\.ru|.*murlyki\.ru. (Это ваши проблемные домены).
- Условие:
- В блоке Действие (Action):
- Тип действия: AbortRequest (Прервать запрос).
mail.com, даже не запуская PHP. Это самый эффективный способ экономии трафика.- Бот заходит и делает 5 запросов за 1 секунду.
- IIS говорит: «Так, лимит в 5 штук исчерпан, а до конца 20-секундного окна еще далеко».
- Результат: Бот блокируется на все оставшиеся 19 секунд.
- Современный браузер при открытии одной страницы может одновременно запросить 5-10 файлов (картинки, стили, иконку favicon).
- Итог: Реальный пользователь зайдет на вашу заглушку, скачает 5 картинок и тут же получит бан на 20 секунд. Он увидит «белый экран» или ошибку.
- Количество запросов: 20
- Период времени (мс): 2000 (2 секунды)
- Логика: Обычный человек не успеет кликнуть 20 раз за 2 секунды, а бот — легко.
mail.com или murlyki.ru, мы заставим IIS обрывать связь мгновенно (Abort).- В IIS Manager выберите ваш сайт.
- Откройте Перезапись URL-адресов (URL Rewrite).
- Нажмите Добавить правило(а)... -> Пустое правило.
- Настройте его так:
- Имя: Block Bad Domains
- Узел «Условия» (Conditions): Нажмите «Добавить».
- Входное условие:
{HTTP_HOST} - Тип: «Соответствует шаблону»
- Шаблон:
.*(unifree|murlyki|axom|battle|hell).*
- Входное условие:
- Узел «Действие» (Action):
- Тип действия: AbortRequest (Прервать запрос).
- Нажмите Применить справа.
&y=2026&m=08.... Они очень длинные.Добавьте еще одно правило в URL Rewrite:
- Условие:
{QUERY_STRING} - Шаблон:
.*(&.*){3,}.*(это значит: если в адресе больше 3-х параметров&) - Действие: AbortRequest.
- Нажмите правой кнопкой на сайт -> Изменить привязки (Edit Bindings).
- Удалите оттуда все упоминания
*.mail.com, если они вам не нужны для работы текущей заглушки. - Оставьте только те домены, которые вы реально используете.
URL Rewrite и лимиты IP уже стоят, вот еще 3 «железобетонных» способа:- В IIS Manager выберите сайт и откройте Фильтрация запросов (Request Filtering).
- Перейдите на вкладку Строки запроса (Query Strings).
- В правой панели нажмите Запретить строку запроса... (Deny Query String).
- Добавьте туда ключевые слова из ваших логов:
unicar,gonews,archive. - Результат: Любой запрос с этими словами (которые боты шлют миллионами) будет мгновенно сброшен сервером.
- В настройках Ограничения IP-адресов -> Изменить тип действия при отказе выберите Прервать (Abort).
- Это заставляет сервер послать TCP-пакет
RST(разрыв соединения). Это весит всего несколько байт, в то время как стандартная страница ошибки IIS может весить 1-2 Кб. На 1000 запросах ботов это огромная разница.
&y=2026&m=...). Можно запретить IIS даже принимать такие запросы.- В IIS Manager откройте Редактор конфигурации (Configuration Editor).
- Перейдите в раздел:
system.webServer/security/requestFiltering. - Найдите параметр
requestLimits. - Установите
maxQueryString(например, на 200) иmaxUrl(например, на 400). - Результат: Если бот пришлет «километровую» ссылку из архива, IIS сбросит её сразу, не читая до конца и не запуская ваш PHP.
Cloudflare (Внешний щит) — Бесплатно- Пропускаете свои домены через бесплатный тариф Cloudflare.
- Включаете там режим "Under Attack" или настраиваете WAF Rules.
- Весь мусорный трафик от ботов будет останавливаться на серверах Cloudflare, и до вашего IIS он просто не дойдет. Исходящий трафик вашего сервера упадет до минимума, так как вы будете отвечать только реальным людям.
robots.txt, так как сервер будет обрывать соединение сразу.- В IIS Manager выберите ваш сайт и откройте URL Rewrite (Перезапись URL).
- Нажмите Add Rule(s)... (Добавить правило) -> Request Blocking (Блокировка запросов).
- Настройте так:
- Block access based on: User-agent Header.
- Block request that: Matches the Pattern (соответствует шаблону).
- Pattern:
ClaudeBot|GPTBot|AhrefsBot|Amazonbot|facebookexternalhit|DotBot|PetalBot|Bytespider. - Using: Regular Expressions (Регулярные выражения).
- How to block: Abort Request (это максимально экономит трафик, обрывая связь).
# Заменить 1.2.3.4 на IP бота из вашего лога
Add-WebConfigurationProperty -pspath 'MACHINE/WEBROOT/APPHOST/Имя_Вашего_Сайта' -filter "system.webServer/security/ipSecurity" -name "." -value @{ipAddress="1.2.3.4";allowed=$false}
$logPath = "C:\inetpub\logs\LogFiles\W3SVC1\u_ex*.log" # путь к вашим логам
Get-Content $logPath | Where-Object { $_ -notmatch "^#" } | ForEach-Object { $_.Split(" ")[8] } | Group-Object | Where-Object { $_.Count -gt 500 } | Select-Object Name, Count | Sort-Object Count -Descending
- Зайдите в Диспетчер служб IIS.
- Выберите ваш Сайт в дереве слева.
- В центре найдите иконку Перезапись URL-адресов (URL Rewrite) и откройте её.
- В правой панели («Действия») нажмите Добавить правило... (Add Rule).
- Выберите шаблон Блокировка запросов (Request Blocking) и нажмите ОК.
- В появившемся окне настройте так:
- Блокировать доступ на основе: (Block access based on) выберите Заголовок User-Agent (User-agent Header).
- Блокировать запросы, которые: (Block request that) выберите Соответствует шаблону (Matches the Pattern).
- Шаблон (регулярное выражение): Вставьте список ботов из ваших логов через вертикальную черту (она означает «ИЛИ»):
ClaudeBot|GPTBot|AhrefsBot|Amazonbot|facebookexternalhit|DotBot|PetalBot|Bytespider|SemrushBot - Тип блокировки: (How to block) выберите Прервать запрос (Abort Request).
GPTBot) присылает запрос:- IIS считывает только заголовок (первые несколько байт).
- Видит запрещенное имя в User-Agent.
- Мгновенно разрывает TCP-соединение.
- Ваш PHP-скрипт даже не запускается, а бот получает «пустоту» вместо страницы. Трафик падает до физического минимума.
System (который отвечает за IIS) должен перестать генерировать большой исходящий поток.AbortRequest (мгновенный разрыв соединения без отправки данных).<system.webServer>:<configuration>
<system.webServer>
<rewrite>
<rules>
<!-- Правило блокировки ботов по User-Agent -->
<rule name="BlockBadBots" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_USER_AGENT}" pattern="ClaudeBot|GPTBot|Ahrefs|Amazonbot|facebookexternalhit|DotBot|PetalBot|Bytespider|SemrushBot|MegaIndex|MJ12bot|YandexBot|Googlebot|bingbot" />
</conditions>
<action type="AbortRequest" />
</rule>
<!-- Правило блокировки мусорных доменов (unifree, murlyki и т.д.) -->
<rule name="BlockBadDomains" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{HTTP_HOST}" pattern=".*(unifree|murlyki|axom|battle|hell|vshost).*" />
</conditions>
<action type="AbortRequest" />
</rule>
<!-- Правило против бесконечных ссылок (более 3 параметров в URL) -->
<rule name="BlockLongQuery" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{QUERY_STRING}" pattern=".*(&.*){3,}.*" />
</conditions>
<action type="AbortRequest" />
</rule>
</rules>
</rewrite>
</system.webServer>
</configuration>
- BlockBadBots: Если в имени браузера (User-Agent) есть слово из списка (например,
GPTBotилиAhrefs), сервер сразу сбрасывает соединение. - BlockBadDomains: Если запрос пришел на старый домен типа
mail.comилиmurlyki.ru(которые у вас в биндингах), сервер не дает скачивать заглушку. - BlockLongQuery: Если бот пытается ходить по «архивным» ссылкам с кучей параметров (те самые
&y=2026&m=08...), запрос обрывается.
Turn on your Visual Search History?
Google uses its visual recognition technologies to process the images you use to search, like when you search with Google Lens. If you turn on your Visual Search History, Google will save these images from eligible Google services to your Web & App Activity when you’re signed in to your Google Account. You can learn more about this setting and which Google services save images to it at g.co/Search/VisualSearchHistory.
How visual search history is used
Your Visual Search History may be used to improve your experience on Google services, like letting you revisit your past visual searches. It may be used to develop and improve Google’s visual recognition and search technologies, as well as the Google services that use them.
When visual search history is off
If you turn this setting off, any previous Visual Search History may still be kept and used to improve Google’s visual recognition and search technologies, unless you delete it from your Web & App Activity.
Visual Search History doesn’t affect images saved by other settings, like Gemini Apps Activity.
How to manage your Visual Search History
You can view, delete, or manage your Visual Search History at activity.google.com. To download your Visual Search History, visit takeout.google.com. Images will be deleted in accordance with your Web & App Activity auto-delete settings, although some types of images may be deleted sooner.
Google uses and saves data in accordance with Google Privacy Policy.
